<?php

/**
 * @package   auto_occasion
 * @subpackage 
 * @author    CMS
 * @copyright 2011
 * @license    All rights reserved
 **/

class formuleOptionSrv {

    
    public static function getById($_iId) {
        $oFac = jDao::get('commun~option_formule') ;
        return $oFac->get($_iId) ;
    }
    
    public static  function getChoiseByOptionId ($_iId) {
        $oFac  = jDao::get('commun~ao_option_formule_choix') ;
        $oCond = jDao::createConditions() ;
        $oCond->addCondition('formch_optionFormId', '=', $_iId) ;
        return $oFac->findBy($oCond)->fetchAll() ;
    }
    
    public static  function getWhithCriteriasById ($_iId) {
        $oOptionFormule = ($_iId) ? self::getById($_iId) : self::init() ;
        $oOptionFormule->choixs = self::getChoiseByOptionId($oOptionFormule->id_option_formule) ;
        return $oOptionFormule ;
    }
    
    public static  function supprimer ($_iId) {
        $oFac = jDao::get('commun~option_formule') ;
        return $oFac->delete($_iId) ;
    }

    
    /**
	 *Fonction pour afficher la liste des options
	*/
      public function liste($_iOffset, $_iParPage){
        $formuleOption= jDao::get("commun~option_formule");

        $condition  = jDao::createConditions();

        $tResult['option']     =  $formuleOption->findBy($condition, $_iOffset, $_iParPage)->fetchAll();
        $tResult['nbRecords']  =  $formuleOption->countBy($condition);

          return $tResult;
      }

          
    /**
	 *Fonction pour afficher la liste des types de paiement
	*/
      public function listePaiement(){
        $maFactory= jDao::get("commun~ao_option_typepaiement");
        $liste = $maFactory->findAll();

       return $liste->fetchAll();
      }

    /**
    * Fonction pour sauvegarder une option
    * @param object $_option
    */
    public static function ajouter($_option){
      
        $dao = jDao::get('commun~option_formule');

        $formuleOption = jDao::createRecord('commun~option_formule') ;
        $formuleOption->lib_option_formule = $_option->lib_option_formule ;
        $formuleOption->status             = $_option->status ;
        
        if ($dao->insert($formuleOption)) {
           return $formuleOption->id_option_formule;
        } else {
            return false ;
        }
    }

    /**
     * Fonction pour sauvegarder une option
     * @param object $_option
     */
    public static function modifier($_option){

        $dao    = jDao::get('commun~option_formule');
        $option = $dao->get($_option->id);

        $option->lib_option_formule = $_option->lib_option_formule;
        $option->status             = $_option->status;
        if ($dao->update($option)){
            return $option ;
        }else {
            return false;
        }
    }

    /**
    * Fonction permettant d'avoir une option formule à partir de son id
    * @param object $_id
    */
    public static function chargeParId($_id){
      
        $dao = jDao::get('commun~option_formule');
        return  $dao->get($_id);
    }

    /**
     * Fonction permettant d'initialiser un objet option formule
     * @return object
     *
     */
    public static function init () {

        return jDao::createRecord("commun~option_formule");
    }
    
    /**
     * prepare le donnée pour l'autocomplete
     *
     * @param string $_zSearch
     * @return string 
     */
    public function getAutoComplete($_zSearch) {
        
        $oFac   = jDao::get('commun~option_formule') ;
        $oCond  = jDao::createConditions();
        $oCond->addCondition('lib_option_formule', 'LIKE', $_zSearch) ;
        $oCond->addCondition('status', '=', 1) ;
        $toRecords = $oFac->findBy($oCond)->fetchAll() ;
        
        $zRecord = '' ;
        foreach ($toRecords as $oRecord) {
            $zRecord = $oRecord->id_option_formule . '|' . $oRecord->lib_option_formule . "\n" ;
        }
        
        return $zRecord ;
    }
    
    /**
     * Charge tous les choix disponible sur un option
     * @param type $iId 
     */
    public function getAllChoiseByOptionId ($iId) {
        $cnx    = jDb::getConnection();
        $sql    = "SELECT ao_option_formule.*  FROM ao_lien_formule ";
        $sql   .= "INNER JOIN ao_option_formule ON ao_option_formule.id_option_formule =  ao_lien_formule.id_option_formule ";
        $sql   .= "WHERE id_formule ='" . $date ."' LIMIT 1";
        $rs     = $cnx->query($sql);

        return $rs->fetch();
    }
    
    /**
     * sauvegarde un choix
     *
     * @param array $toParams tableau de paramettre (issue d'un formulaire)
     */
    public static function saveChoise ($toParams) {
        
        $oFac = jDao::get('commun~ao_option_formule_choix') ;
        $oRecord = jDao::createRecord('commun~ao_option_formule_choix') ;
        
        foreach ($oRecord as $zKey => $item) {
            if (array_key_exists($zKey, $toParams)) {
                $oRecord->$zKey = $toParams[$zKey] ;
            }
        }
        
        if ($oRecord->formch_id) {
            $bReturn = $oFac->update($oRecord) ;
        } else {
            $bReturn = $oFac->insert($oRecord) ;
        }
        
        return ($bReturn) ? $oRecord : $bReturn ;
    }
    
    /**
     * Verifie si le label de choix choisi n'appartient pas déjà dans à l'a formule l'option
     *
     * @param string $_zLibelle
     * @param int $_iFormOptionId
     * @return int 
     */
    public static function isThisInChoise ($_zLibelle, $_iFormOptionId) {
        $oFac = jDao::get('commun~ao_option_formule_choix') ;
        $oCond = jDao::createConditions() ;
        $oCond->addCondition('formch_libelle', '=', trim($_zLibelle)) ;
        $oCond->addCondition('formch_optionFormId', '=', (int)$_iFormOptionId) ;
        return $oFac->countBy ($oCond) ;
    }
    
    /**
     * Suppression d'un choix
     *
     * @param int $_iChoiseId
     * @return boolean 
     */
    public static function supprChoise ($_iChoiseId) {
        
        $oFac = jDao::get('commun~ao_option_formule_choix') ;
        return $oFac->delete($_iChoiseId) ;
        
    }

    /**
     * les options non supprimables
     *
     * @return array 
     */
    public static function listeNonSuprimable () {
        
        $cnx  = jDb::getConnection();
        $sql  = " SELECT option_list FROM lien_optionformule ";
        $rs   = $cnx->query($sql);

        $result = array();
        while($row = $rs->fetch()){
            $tab = explode(',', $row->option_list);
            if (sizeof($tab)) {
                foreach ($tab as $item) {
                    $result[] = $item;
                }
            } elseif ($row->option) {
                $result[] = $row->option_list;
            }
        }

        return array_unique($result);
        
    }
    /**
     * les options non supprimables 
     * celles qui sont déjà liées à une annonce
     *
     * @return array 
     */
    public static function listeNonSuprimable_ () {
        
        $cnx  = jDb::getConnection();
        $sql  = " SELECT idOption FROM ao_annonce_formule WHERE idOption IS NOT NULL AND idOption <> '' ";
        $rs   = $cnx->query($sql);

        $result = array();
        while($row = $rs->fetch()){
            $tab = explode(',', $row->idOption);
            if (sizeof($tab)) {
                foreach ($tab as $item) {
                    if (!in_array($item, $result) && $item) {
                        $result[] = $item;
                    }
                }
            } elseif ($row->idOption) {
                $result[] = $row->idOption;
            }
        }

        return array_unique($result);
        
    }
    /**
     * les options non supprimables 
     * celles qui sont déjà liées à une annonce
     *
     * @return array 
     */
    public static function listeNonSuprimable_2 ($tids) {
        
        $cnx  = jDb::getConnection();
        $sql  = " SELECT formch_optionFormId FROM ao_option_formule_choix WHERE formch_id IN (".implode(',', $tids).")";
        $rs   = $cnx->query($sql);

        $result = array();
        while($row = $rs->fetch()){
            if (!in_array($row->formch_optionFormId, $result) && $row->formch_optionFormId) {
                $result[] = $row->formch_optionFormId;
            }
        }

        return array_unique($result);
        
    }

          /**
     * Fonction pour avoir une requête d'ajout de paiement dans la table ao_option_typepaiement_link
     * @param int $idOption
     * @param array $idPaiement
    */
    public static function insertPaiementOption($idOption,$idPaiement){

            $cnx = jDb::getConnection();
            $sqlInsert = "";
            if(sizeof($idPaiement)){
            foreach ($idPaiement as $key => $value) {
                $sep = ($key == 0)? "INSERT INTO ao_option_typepaiement_link (id_option,id_typepaiement) VALUES " : ",";
                $sqlInsert .= $sep . "($idOption,$value)";
            }   
            }
            $cnx->exec($sqlInsert);
            
    }

    /**
     * Suppression d'un lien option_paiement
     * @param int $_id
     * @return boolean 
     */
    public static function deletePaiementOption($_id) {
        
        $sql = "DELETE FROM ao_option_typepaiement_link where id_option =" . $_id ;
        $cnx = jDb::getConnection();
        $cnx->exec($sql);
    }
       /**
     * Charge tous les choix disponible sur un option
     * @param type $iId 
     */
    public function getPaiement ($iId = 0) {
        $cnx  = jDb::getConnection();

        $sql  = "SELECT p.paiement, p.id";
        if ($iId){
               $sql.= " , ( SELECT 1 FROM ao_option_typepaiement_link tpl 
                    WHERE tpl.id_option=$iId  AND p.id = tpl.id_typepaiement
                    LIMIT 1) AS coche" ;
        }

        $sql .= " FROM ao_option_typepaiement p ";
        $rs     = $cnx->query($sql);

        return $rs->fetchAll();
    }
    

}
